{-# LANGUAGE TemplateHaskell, QuasiQuotes, OverloadedStrings #-}
module Handler.Page where

import Foundation

import Settings.StaticFiles

import Handler.Common

import Control.Applicative

pageForm :: Page -> AForm MSC MSC Page
pageForm page = Page 
          <$> pure (pageName page)
          <*> areq htmlField "text" (Just $ pageText page)

getPageR :: String -> Handler RepHtml
getPageR name = do

    (pageId,page) <- runDB $ getBy404 ( UniqueName name)

    ((_,form), enc) <- generateFormPost $ renderDivs $ pageForm page


    newDefaultLayout $ do
        setTitle "About WSO-UV"

        addStylesheet $ StaticR css_page_css
        addScript $ StaticR js_page_js 

        [whamlet|
           <!--
           <div contenteditable="false">
             <h3>Заголовок h3
             <h4>Заголовок h4
             <p>Парагаф
           -->

           <div .edit-panel>

             <form .post action=@{PageR $ pageName page} method=post enctype=#{enc}>
               <div .hidden>
                 ^{form}
               <div .btn-toolbar>
                 <!--
                 <div .btn-group>
                   <a .btn .dropdown-toggle data-toggle="dropdown">
                     Вставка
                     <span .caret>
                   <ul .dropdown-menu>
                     <li>
                       <h3>Заголовок h3
                       <h4>Заголовок h4
                     <li>
                       <p>Парагаф
                  -->
   
                 <div .btn-group>
                   <button type=button .btn data-toggle="button">Редактировать текст
                   <button type=submit .btn .btn-primary>Применить

                  
           <div #article role="article">
            #{ pageText page}
          
        |]

postPageR :: String -> Handler RepHtml
postPageR name = do

    (pageId,page) <- runDB $ getBy404 (UniqueName name)

    ((res, _), _) <- runFormPost $ renderDivs $ pageForm page

    case res of 
         FormSuccess page -> do 
            runDB $ update pageId [ PageText =. (pageText page) ]
            setMessage "Изменения были успешно сохранены!"
            redirect RedirectPermanent $ PageR name
         _ -> do
            setMessage "Пожалуйста, правильно заполните поля формы"
            redirect RedirectPermanent $ PageR name

     
